#include <stdio.h>
#include <stdlib.h>
typedef struct{
	int x;
	int y;
	int i;
}stack;

int chess[12][12]={0};
int Move[8][2]={{1,-2},{2,-1},{2,1},{1,2},{-1,2},{-2,1},{-2,-1},{-1,-2}};
int top=0;
stack *s=(stack *) malloc (64*sizeof (stack));

void Push(int x,int y,int i){
	s[top-1].i=i;
	s[top].x=x;
	s[top].y=y;
}

void Pop(int x,int y){
	chess[x][y]=0;
	s[top].x=s[top].y=0;
	s[top--].i=-1;
}

void Print(){
		for (int i=2;i<10;i++){
			 for (int j=2;j<10;j++)
			 	printf("%3d",chess[i][j]);
			 printf("\n");
		}
	}

void Horse(){
	int a,b,i=0; 
	while (top<63){
		for (i=s[top].i+1;i<8;i++){
			a=s[top].x+Move[i][0];
			b=s[top].y+Move[i][1];
			if(!chess[a][b]){
				chess[a][b]=++top+1;
				Push(a,b,i);
				break;
			}
		}
		if (i==8)
			Pop(s[top].x,s[top].y);
	}
}
 
int main(void){
	int i,j;
	for (i=0;i<12;i++) 
		for (j=0;j<12;j++)
			if (i<2 || i>9 || j<2 || j>9)
				chess[i][j]=-1;			
	for (i=0;i<64;i++)
		s[i].i=-1;
		
	s[top].x=s[top].y=2;
	s[top].i=-1;
	chess[2][2]=1;
	Horse();
	Print();
	return 0;
}
